#include "Env.h"
namespace compiler{
	Env::Env(Env *p){
		this->pre=p;
	}
	Token *Env::get(string &s){
		Token* t=get_current(s);
		if(t!=NULL)
			return t;

		Env *te=pre;

		while((t=te->get_current(s))==NULL)
		{
			te=te->pre;
			if(te==NULL)
				return NULL;
		}
		return t;
	}
	void Env::put(string &s,Token &t){
		this->m.insert(pair<string,Token*>(s,&t));
	}
	Token *Env::get_current(string &s){
		map<string,Token*>::const_iterator it;
		it=m.find(s);
		if(it==m.end())
			return NULL;
		else
			return it->second;	
	}
}